/*!
 * @file waterMenager.hh
 * @brief Wyświetlanie wody
 */

#ifndef __MODES_WORLD_WATER_WATERMENAGER_HH
#define __MODES_WORLD_WATER_WATERMENAGER_HH

#include <string>
#include "engine/basic/texture.hh"
#include "engine/basic/shader.hh"
#include "engine/basic/point2f.hh"
#include "engine/basic/point3f.hh"

enum water_drawMode {water_dm_all, water_dm_godrays};

/*!
 * @brief Klasa do malowania wody
 */
class waterMenager {
public:
	/*!
	 * @brief Konstruktor wypełnia vbo, vao.
	 * @return Obiekt
	 */
	waterMenager();

	void draw(water_drawMode dm);

	/*!
	 * @brief Ustawienie wskaźnika na teksturę z odbiciem
	 * @param tx Tekstura z odbiciem
	 */

	texture *getReflectionTexture();
	texture *getUnderwaterTexture();

private:
	/*!
	 * @brief Malowanie wody na zadanym kwadracie
	 * @param pos przesunięcie
	 */
	void drawSquare(point2f pos, water_drawMode dm);

	point2f translation;

	/*!
	 * @brief Tekstura z odbiciem
	 */
	texture *reflectionTex;

	/*!
	 * @brief Tekstura z dnem
	 */
	texture *underwaterTex;

	/*!
	 * @brief Tekstury z szumem Perlina
	 */
	texture *tex1, *tex2;

	/*!
	 * @brief VAO
	 */
	GLuint vao;

	/*!
	 * @brief VBO [vert, texcoord]
	 */
	GLuint vbo[2];

	/*!
	 * @brief Program cieniowania
	 */
	shader *waterShader;

};

#else
class waterMenager;
#endif
